// 泛型在保证类型安全的同时,可以让函数与多种不同类型一起工作,灵活使用
// 类型变量的type是特殊的类型变量,它可以处理类型而不是值
// 类型变量相当于一个类型容器
export {}

// 定义一个泛型函数,传入什么值,就返回什么值
function id(value:string): string {
  return value
}

function id2(value:number): number {
   return value
}

function id3(value:boolean): boolean {
  return value
}

// 泛型的变量 T可以是任意的类型
// 泛型可以综合传入不同类型 在函数章处理

function commonId<T>(value:T):T {
  return value
}

commonId<string>('1')
commonId(2) //类型的推断


// 定义数组类型
let arr2:number[] = [1,2,3]
let arr:Array<string> = ['1']

// 泛型函数自定义类型语法
type CustomFunc = <T>(value:T,value2:T,value3:T) => T

let func:CustomFunc = (value) => {
  return value
}
func<string>('zs',"","")  //函数执行的时候,带上的参数必须和定义好的类型参数一致




// 泛型的简化就是不加<>因为会有类型推导的存在所以没什么问题

